let ws:WebSocket;
let globalCallback:any = null;//定义外部接收数据的回调函数
let bol = false; // 是否主动关闭
// import utils from "@/utils";
import { useWebstock } from "@/store";
import{ showToast } from 'vant';
// import Message from "@/utils/message";
// import LocalStore from "./LocalStore";
//发送数据
function webSocketSend(data:any,callback= null) {
  // console.log(data,"json发送的数据");
  
  ws.send(data);//在这里根据自己的需要转换数据格式
}
//在其他需要socket地方调用的函数，用来发送数据及接受数据
function sendSock(agentData:any, callback:any) {
  // console.log("走了sendSock");
  
  globalCallback = callback;//此callback为在其他地方调用时定义的接收socket数据的函数，此关重要。
  //下面的判断主要是考虑到socket连接可能中断或者其他的因素，可以重新发送此条消息。
  // console.log(ws.readyState,"ws状态");
  
  switch (ws.readyState) {
    //CONNECTING：值为0，表示正在连接。
    case ws.CONNECTING:
      setTimeout(function() {
        webSocketSend(agentData, callback);
      }, 1000);
      break;
    //OPEN：值为1，表示连接成功，可以通信了。
    case ws.OPEN:
      webSocketSend(agentData);
      break;
    //CLOSING：值为2，表示连接正在关闭。
    case ws.CLOSING:
      setTimeout(function() {
        webSocketSend(agentData, callback);
      }, 1000);
      break;
    //CLOSED：值为3，表示连接已经关闭，或者打开连接失败。
    case ws.CLOSED:
      // do something
      break;
    default:
      // this never happens
      break;
  }
}
	//连接socket建立时触发
function webSocketOpen() {
  // if (e === "LOGIN") {
  //   const data = {
  //     type: "CONNECT",
  //     token: sessionStorage.getItem("token") || ""
  //   };
  //   sendSock(data, function() {});
  // }
  // const tid = utils.LocalStore.get("userinfo").realName;
  // const data = { bind:tid, terminal:'admin_info' };
  // sendSock(data, function(){});
  // console.log("WebSocket连接成功");
}
//用户端接收服务端数据时触发,e为接受的数据对象
function webSocketOnMessage(e:any) {
  
  const data = JSON.parse(e.data);//根据自己的需要对接收到的数据进行格式化
  // const data =e.data;//根据自己的需要对接收到的数据进行格式化

  if(data.messageData=='欢迎你：管理员'){
    return;
  };
  globalCallback(data);//将data传给在外定义的接收数据的函数，至关重要。
  /*在此函数中还可以继续根据项目需求来写其他东西。 比如我的项目里需要根据接收的数据来判断用户登录是否失效了，此时需要关闭此连接，跳转到登录页去。*/
}
//关闭socket
function webSocketClose() {
	// bol = true;
	if(ws){
		ws.close();
	}
	// const out = setTimeout(()=>{
	// 	bol = false;
	// 	clearTimeout(out);
	// },500);


  //因为我建立了多个socket，所以我需要知道我关闭的是哪一个socket，就做了一些判断。
  // if (
  //   ws.readyState === 1 &&
  //   ws.url === "ws://1xx.xx.xx.xxx:8088/ws"
  // ) {
  //   ws.close();//这句话是关键，之前我忘了写，一直没有真正的关闭socket
    // console.log("对话连接已关闭");
  // }
}
//初始化websocket
function initWebSocket(url:string,callback= null) {
  globalCallback = callback;
  if ("WebSocket" in window) {
    const token = localStorage.getItem('token');
    if (token) {
      // console.log("建立链接");
      ws = new WebSocket(url,[token]);//创建socket对象
    };
  } else {
    alert("该浏览器不支持websocket!");
  }
  //打开
  ws.onopen = function() {
    // console.log("发起连接");
    webSocketOpen();
  };
  //收信
  ws.onmessage = function(e:any) {
    // console.log(e,"收信");
    webSocketOnMessage(e);
  };
  //关闭
  ws.onclose = function(e:any) {
	  // console.log("关闭了", e, bol);
	  if(bol) return;
	  // initWebSocket(e?.currentTarget?.url);
    // webSocketClose();
  };
  //连接发生错误的回调方法
  ws.onerror = function() {
	  showToast('聊天室连接错误');
	  // useWebstock().setConn(true);
    // console.log(e,"WebSocket连接发生错误");
  };
}


//将初始化socket函数、发送（接收）数据的函数、关闭连接的函数export出去
export default {
  initWebSocket,
  webSocketClose,
  sendSock
};

